﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DoNet.WechatPay.V2.Entitys.Results
{
    public class PayRefundResult : PayResultCode
    {
        /*
        返回状态码	return_code	是	return_code	是	return_code	是	return_code	是	return_code	是	String(16)	SUCCESS/FAIL 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断
        返回信息	return_msg	否	return_msg	否	return_msg	否	return_msg	否	return_msg	否	String(128)	返回信息，如非空，为错误原因 签名失败 参数格式校验错误
        以下字段在return_code为SUCCESS的时候有返回												
        业务结果	result_code	是	result_code	是	result_code	是	result_code	是	result_code	是	String(16)	SUCCESS/FAIL
        错误代码	err_code	否	err_code	否	err_code	否	err_code	否	err_code	否	String(32)	详细参见错误列表
        错误代码描述	err_code_des	否	err_code_des	否	err_code_des	否	err_code_des	否	err_code_des	否	String(128)	错误返回的信息描述
        服务商的APPID	appid	是	appid	是	appid	是	appid	是	appid	是	String(32)	服务商商户的APPID
        商户号	mch_id	是	mch_id	是	mch_id	是	mch_id	是	mch_id	是	String(32)	调用接口提交的子商户公众账号ID
        子商户公众账号/应用ID	sub_appid	否	sub_appid	否	sub_appid	是	sub_appid	否	sub_appid	是	String(32)	调用接口提交的商户号
        子商户号	sub_mch_id	是	sub_mch_id	是	sub_mch_id	是	sub_mch_id	是	sub_mch_id	是	String(32)	调用接口提交的子商户号
        随机字符串	nonce_str	是	nonce_str	是	nonce_str	是	nonce_str	是	nonce_str	是	String(32)	微信返回的随机字符串
        签名	sign	是	sign	是	sign	是	sign	是	sign	是	String(32)	微信返回的签名，详见签名生成算法

        微信支付订单号	transaction_id	是	transaction_id	是	transaction_id	是	transaction_id	是	transaction_id	是	String(32)	微信支付订单号
        商户订单号	out_trade_no	是	out_trade_no	是	out_trade_no	是	out_trade_no	是	out_trade_no	是	String(32)	商户系统内部订单号，要求32个字符内（最少6个字符），只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
        商户退款单号	out_refund_no	是	out_refund_no	是	out_refund_no	是	out_refund_no	是	out_refund_no	是	String(64)	商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
        微信退款单号	refund_id	是	refund_id	是	refund_id	是	refund_id	是	refund_id	是	String(32)	微信退款单号
        申请退款金额	refund_fee	是	refund_fee	是	refund_fee	是	refund_fee	是	refund_fee	是	int	退款总金额,单位为分,可以做部分退款
        退款金额	settlement_refund_fee	是	settlement_refund_fee	是	settlement_refund_fee	是	settlement_refund_fee	是	settlement_refund_fee	是	int	去掉非充值代金券退款金额后的退款金额，退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额
        订单金额	total_fee	是	total_fee	是	total_fee	是	total_fee	是	total_fee	是	int	订单总金额，单位为分，只能为整数，详见支付金额
        应结订单金额	settlement_total_fee	否	settlement_total_fee	否	settlement_total_fee	否	settlement_total_fee	否	settlement_total_fee	否	int	当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。
        货币种类	fee_type	否	fee_type	否	fee_type	否	fee_type	否	fee_type	否	String(8)	符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
        现金支付金额	cash_fee	是	cash_fee	是	cash_fee	是	cash_fee	是	cash_fee	是	int	订单现金支付金额，详见支付金额
        现金退款金额	cash_refund_fee	否	cash_refund_fee	否	cash_refund_fee	否	cash_refund_fee	否	cash_refund_fee	否	int	现金退款金额，单位为分，只能为整数，详见支付金额
        代金券退款总金额	coupon_refund_fee	否	coupon_refund_fee	否	coupon_refund_fee	否	coupon_refund_fee	否	coupon_refund_fee	否	int	代金券退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见代金券或立减优惠
        退款代金券使用数量	coupon_refund_count	否	coupon_refund_count	否	coupon_refund_count	否	coupon_refund_count	否	coupon_refund_count	否	int	退款代金券使用数量
        代金券类型	 coupon_type_$n	否	 coupon_type_$n	否	 coupon_type_$n	否	 coupon_type_$n	否	 coupon_type_$n	否	String	"CASH--充值代金券
        NO_CASH---非充值优惠券
        开通免充值券功能，并且订单使用了优惠券后有返回（取值：CASH、NO_CASH）。$n为下标,从0开始编号，举例：coupon_type_$0"
        代金券ID	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	coupon_id_$n	否	String(20)	代金券或立减优惠ID, $n为下标，从0开始编号
        单个代金券金额	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	coupon_fee_$n	否	int	单个代金券或立减优惠支付金额, $n为下标，从0开始编号
 
        */
        /// <summary>
        /// 微信订单号
        /// 是
        /// </summary>
        public string transaction_id { set; get; } = string.Empty;
        /// <summary>
        /// 商户订单号
        /// 是
        /// </summary>
        public string out_trade_no { set; get; } = string.Empty;
        /// <summary>
        /// 商户退款单号
        /// 是
        /// </summary>
        public string out_refund_no { set; get; } = string.Empty;
        /// <summary>
        /// 微信退款单号
        /// 是
        /// </summary>
        public string refund_id { set; get; } = string.Empty;
        /// <summary>
        /// 申请退款金额
        /// 是
        /// </summary>
        public long refund_fee { set; get; }
        /// <summary>
        /// 退款金额
        /// 是
        /// </summary>
        public long settlement_refund_fee { set; get; }
        /// <summary>
        /// 订单金额
        /// 是
        /// </summary>
        public long total_fee { set; get; }
        /// <summary>
        /// 应结订单金额
        /// 否
        /// </summary>
        public long settlement_total_fee { set; get; }
        /// <summary>
        /// 货币种类
        /// 否
        /// </summary>
        public long fee_type { set; get; }
        /// <summary>
        /// 现金支付金额
        /// 是
        /// </summary>
        public long cash_fee { set; get; }
        /// <summary>
        /// 现金退款金额
        /// 否
        /// </summary>
        public long cash_refund_fee { set; get; }
        /// <summary>
        /// 代金券退款总金额
        /// 否
        /// 代金券退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见代金券或立减优惠
        /// </summary>
        public long coupon_refund_fee { set; get; }
        /// <summary>
        /// 退款代金券使用数量
        /// 否
        /// </summary>
        public long coupon_refund_count { set; get; }
        /// <summary>
        /// 代金券列表
        /// </summary>
        public List<CouponInfo> coupon_list = new List<CouponInfo>();
    }
}
